[Coding030] 图 - 图的着色

k-图着色

Ben 2024/01/26

More coding records

Get the knowledge flowing and circulating! :)

目录

标题:图的着色问题

概念

无向图

图着色问题Graph Coloring ProblemGCP),又称着色问题,是最著名的NP-完全问题之一。

给定一个无向图G=(V,E),其中 V 为顶点集合,E 为边集合,图着色问题即为V 分为 K 个颜色组,每个组形成一个独立集,即其中没有相邻的顶点其优化版本是希望获得最小的 K

道路着色问题(Road Coloring Problem)是图论中最著名的猜想之一。

参考:维基百科

相关问题

相关术语

  1. 色数(英语:chromatic number),也被称为顶点色数(vertex chromatic number):指将一张图上的每个顶点染色,使得相邻的两个点颜色不同,最小需要的颜色数。最小染色数用 χ(G)γ(G) 表示。

  2. 色数(edge chromatic number):指将一张图上的每条边染色,使有公共顶点的边颜色不同,最少需要的颜色数叫边色数,用 χ(G) 表示。

通俗说法

问题1 m-着色判定问题

给定一个图 G ,给定一个 m 种颜色,有没有一个方案能够让图 G 中的任意相邻顶点的颜色不一样?

  • 有没有?(True or False)

原图方案1
image-20240127172418151image-20240127172656921

问题2 m-着色判定问题拓展

给定一个图 G ,给定一个 m 种颜色,有多少方案能够让图 G 中的任意相邻顶点的颜色不一样?

  • 有多少?(How many)

从这个拓展问题可知,m-着色的答案不唯一

原图方案1方案2
image-20240127172418151image-20240127172656921image-20240127172823930

问题3 m-着色优化问题

给定一个图 G ,若该图至少需要 m 种颜色才能够让图 G 中的任意相邻顶点的颜色不一样,问这个 m 是多少

  • m 是多少?

 

代码

问题1

代码 - m-着色判定问题

 

问题2

代码 - m-着色判定问题(拓展

 

代码对比(图着色判定问题 v.s 图着色判定问题(拓展)

image-20240127181234957

 

测试样例01
  • 5个顶点:编号从1~5

  • 7条边

  • 3种颜色:红、绿、蓝

注意:顶点编号从1开始,不是从0开始。

输出:6

 

测试样例02
  • 13个顶点:编号从1~13

  • 41条边

  • 3种颜色:红、绿、蓝

注意:顶点编号从1开始,不是从0开始。

输出:336

 

测试样例03

image-20240127184937026

Fig. 有时间一定要手动画一下这个算法步骤图,测试一下问题1的代码

手绘过程示意图

针对void dfs(int cur)测试样例2的过程示意图(输出1种着色方案)

image-20240127185939477

Fig. 整体流程图

image-20240127190334620

image-20240127190252632

 

思考 - 如何建模?

条件:元素=[1,2,3,4,5,6,7,8,9],互斥=[(1,4),(2,5),(1,5),(5,6),(7,8),(3,9),(2,8),(4,5)]

要求:把元素组成 N 个组, 保证互斥元素不在同一个组里, 并且 N 最小。

思路:这个问题实际上就是图的 m-可着色优化问题

 

参考资料

https://blog.csdn.net/qq_17550379/article/details/102563756

https://blog.csdn.net/Wu_L7/article/details/125062506

https://oi-wiki.org/graph/color/

https://baike.baidu.com/item/%E5%9B%BE%E7%9D%80%E8%89%B2%E9%97%AE%E9%A2%98/8928655